color-swatch: add a color-light/color-dark style class for intensity
authorCosimo Cecchi <cosimoc@gnome.org>
Wed, 8 Feb 2012 21:35:57 +0000 (16:35 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 14 Feb 2012 21:36:57 +0000 (16:36 -0500)
Themes might want to set different colors on the badge if the displayed
color is light or dark. Use a style class for this when we set a color
on the swatch.

gtk/gtkcolorswatch.c

index 8e4b38deba918c0a783db00f4bccbec2c4894d7b..d994729e906a34f6ddd441512f6b7baa53ee4cc3 100644 (file)
@@ -612,15 +612,31 @@ void
 gtk_color_swatch_set_rgba (GtkColorSwatch *swatch,
                            const GdkRGBA  *color)
 {
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (GTK_WIDGET (swatch));
+
   if (!swatch->priv->has_color)
-    gtk_drag_source_set (GTK_WIDGET (swatch),
-                         GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
-                         dnd_targets, G_N_ELEMENTS (dnd_targets),
-                         GDK_ACTION_COPY | GDK_ACTION_MOVE);
+    {
+      gtk_drag_source_set (GTK_WIDGET (swatch),
+                           GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
+                           dnd_targets, G_N_ELEMENTS (dnd_targets),
+                           GDK_ACTION_COPY | GDK_ACTION_MOVE);
+    }
+  else
+    {
+      gtk_style_context_remove_class (context, "color-light");
+      gtk_style_context_remove_class (context, "color-dark");
+    }
 
   swatch->priv->has_color = TRUE;
   swatch->priv->color = *color;
 
+  if (INTENSITY (swatch->priv->color.red, swatch->priv->color.green, swatch->priv->color.blue) > 0.5)
+    gtk_style_context_add_class (context, "color-light");
+  else
+    gtk_style_context_add_class (context, "color-dark");
+
   gtk_widget_queue_draw (GTK_WIDGET (swatch));
   g_object_notify (G_OBJECT (swatch), "rgba");
 }